<?php

use Illuminate\Database\Seeder;

class ZipSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        if (($handle = fopen(sprintf('%s/%s', dirname(__FILE__), 'x-ken-all.csv'), "r")) !== false) {
            // 取込ファイルが存在するときのみ
            \DB::table('zips')->truncate();
            // fgetcsv を使うと sjis の仕様問題でうまくパースできない
            $i = 0;
            $quantity = 1;
            while (($line = fgets($handle)) !== false) {
                mb_convert_variables('utf-8', 'sjis-win', $line);
                $data = str_getcsv(trim($line));
                // NOTE: KEN_ALL.CSV を確認する必要がある
                if (count($data) !== 15) {
                    dump($data);
                    \Log::info(sprintf('郵便番号パースエラー:%s', $line));
                    continue;
                }

                $datas[] = array_combine([
                    'zip_cd',
                    'zip5',
                    'zip7',
                    'pref_kana',
                    'city_kana',
                    'town_kana',
                    'pref',
                    'city',
                    'town',
                    'flag1',
                    'flag2',
                    'flag3',
                    'flag4',
                    'has_update',
                    'reason',
                ], $data);
                $i ++;
                if ($i % 1000 == 0) {
                    \DB::table('zips')->insert($datas);
                    $datas = [];
                    echo $quantity * 1000 ." rows inserted into zips table\r\n";
                    $quantity ++;
                }
            }

            if (!empty($datas)) {
                \DB::table('zips')->insert($datas);
                $total = $quantity > 1 ? ($quantity -1) * 1000 + count($datas) : count($datas);
                echo $total ." rows inserted into zips table\r\n";
            }
            
            fclose($handle);
        }
    }
}
